Урок 12 – Движение

В прошлых уроках мы сделали так, чтобы наш объект Player при запуске игры начинал движение вверх. Давайте сделаем так, чтобы объект начал движение только тогда, когда мы будем нажимать на клавишу вверх.

Добавим условие к нашему движению вверх.

Теперь можете запустить игру и вы увидите, что объект начнет движение, когда вы нажмете на клавишу вверх, и будет останавливаться, когда вы будете клавишу отпускать.

Далее добавим движение влево и вправо. Для этого просто выберете наше событие кликнув (можно кликнуть на эти участки левой кнопкой мыши, которые я выделил стрелками), а затем нажмите на комбинацию Ctrl+C, потом два раза Ctrl+V.

Давайте теперь заменим кнопку Up во втором событии на Left, а в третьем событии на Right. Параметры в условиях и действиях мы можем менять, так сказать, прямо на месте. Просто кликаем по тексту Up и меняем его на Left.

Затем меняем остальные параметры на такие значения:

Запускаем и проверяем как реагирует объект на нажатия клавиш Up, Left и Right. Все должно работать.

Давайте теперь добавим в игру стрелки, которые будут менять цвет в зависимости от того, на какую клавишу нажимает игрок. Нажимаем на кнопку, чтобы создать новый объект, затем нажимаем выбираем не спрайт, а магазин GDevelop, где мы бесплатно можем скачать различные готовые спрайты и другие объекты.

В поисковике пишем “Top Arrow” (т.е. стрелка вверх).

Кликаем на стрелку и нажимаем на кнопку “Add to the scene”. Затем в поисковике ищем спрайты “Left Arrow” и “Right Arrow” и тоже добавляем их в нашу сцену.

Далее добавляем их на сцену таким образом.

Теперь добавим действие, когда мы нажимаем на кнопку Up, то стрелка “Вверх” должна менять свой цвет. Для этого в событие, где мы нажимаем кнопку Up, добавляем новое действие.

Выбираем стрелку вверх, и действие Tint Color (поменять оттенок). Лучше менять оттенок на белом спрайте (как наш спрайт), так как на остальных цветах добавление оттенка будет смешиваться с цветом вашего спрайта, и результат будет скорее всего не такой, который вы хотели. А белый цвет, словно чистый лист бумаги, не искажает другие оттенки, которые вы хотите добавить.

Нажмите на белую кнопку со знаком вопроса и тогда откроется окно для выбора цвета.

Нажимаем кнопку Ок.

Далее нажимаем на добавленное нами действие, копируем с помощью комбинации Ctrl+C, и вставляем его в другие события.

Осталось только поменять спрайты в этих действиях.

Проверяем. Как видите, когда мы нажимаем на кнопку Up, то стрелка вверх изменяет свой цвет, но когда мы отпускаем кнопку, стрелка вновь не становится белой. Это происходит потому, что мы не добавили действие на событие, когда мы отпускаем кнопку Up.

Я сейчас покажу два способа как реализовать такое поведение. Итак, первый способ – создаем новое условие, когда кнопка отпущена.

А в действии снова перекрашиваем кнопку, только в белый цвет.

Делаем такое условие и для остальный кнопок.

Проверяем. И как видите, все работает.

Теперь чтобы применить следующий способ, нам надо отключить код для первого способа. Просто выделите событие, зажмите клавишу Shift и выберите два других. Затем нажмите правой кнопкой мыши, появится контекстное меню, где вы должны выбрать – “Toggle disabled” (т.е. Переключатель отключен). Данная команда просто отключает события, которые вы выделили.

Это хороший способ если вы хотите изменить код программы, но не удалять старый код.

Итак, как я уже говорил, весь код что мы пишем проверятся каждый кадр заново, и мы можем в начале кода посвященный движению просто перекрасить все кнопки в белый цвет без каких-либо условий.

Т.е. каждый кадр будет перекрашиваться цвет кнопок в белый, а затем, если клавиша, например Up, нажата, то цвет стрелки перекрасится в другой. Но это происходит настолько быстро, что если вы удерживаете клавишу Up на протяжении нескольких кадров, то перекрашивание в белый и обратное перекрашивание в другой цвет происходит настолько быстро, что вы не увидите момент, когда кнопка на короткое мгновение станет белой.

Итак, код готов. Но есть способ его упростить: как видите мы написали одно действие (перекрасить в белый) для трех кнопок отдельно. Но если мы создадим группу для трех кнопок, то сможем применить одно действие для всей группы. Переходим в редактор сцен и открываем панель групп.

Далее создадим группу “ArrowButtons”.

Кликаем два раза по этой группе и добавляем в нее необходимые объекты.

Далее в событиях удалим два события где мы перекрашивали левую и правую кнопку, а оставшееся событие изменим так.

Далее напишем комментарий для этого события.

Теперь мы изучим с вами еще одну тему – это переменные. Переменная – это просто область в оперативной памяти компьютера, которая содержит какую-либо информацию. Представьте оперативную память в виде стеллажа с банковскими ячейками, каждая ячейка это переменная, а внутри этой ячейки хранится какая-нибудь информация. При выключении компьютера, вся информация из оперативной памяти стирается. Название переменная означает, что данный участок в оперативной памяти может менять свое значение.

А зачем нам нужны переменные? Если мы например захотим изменить скорость передвижения объекта “Player”, то нам придется менять значения для всех четырех направлений движения. Но если мы в качестве значений движения будем использовать переменную, то мы тогда просто один раз меняем значение переменной, и во всем местах, где она используется, значения тоже изменятся, что сильно облегчит нашу работу.

Давайте создадим переменную. Только сперва создадим новую группу “Переменные” и нажмем кнопку “Создать новое событие”.

В условии выберем “At the beginning of the scene”, т.е. действие произойдет только один раз при запуске игры.

А в действии выберем переменную.

Для этого сперва выберем группу “Variables”(т.е. переменные), затем “Scene variables”(т.е. переменные только для этой сцены). Как видите, видов переменных у нас 6 штук, все зависит от типа информации, которую будет хранить переменная. А это может быть текст, число и т.д. О “и т.д.” мы поговорим позже. Выбираем число, в первом пункте задаем имя переменной. Я назвал ее SidewaysForce (т.е. боковая сила. Сейчас я ее использую для всех трех направлений, но потом для движения вверх зададим новую переменную на следующем уроке). Далее указываем во втором пункте какое действие мы хотим сделать с переменной. 

Действий у нас 5:

= (set to) – задать значение;

+ (add) – добавить значение уже к имеющемуся в переменной;

– (subtract) – отнять от значения переменной;

* (multiply by) – умножить значение переменной;

/(divide by) – разделить значение переменной;

Нас пока хотим только задать значение переменной, поэтому указываем “=(set to)”. А в самом значении пишем число 1. Нажимаем кнопку Ок.

Теперь заменим цифру 1, которую мы указывали для импульса, на Variable(SidewaysForce) (где было -1, мы укажем -Variable(SidewaysForce)).

Теперь запустим программу и убедимся, что все работает также как раньше.

Далее если вы хотите изменить скорость движения, вам просто надо будет изменить значение переменной. Давайте укажем для переменной число 5. Затем снова запустите программу. Как видите импульс во всех направлениях увеличился в 5 раз.

Давайте теперь установим игровой контроллер, чтобы движении также управлялось через джойстик. Чтобы добавить поддержку игрового контроллера, нам необходимо установить расширение. Для этого нажимаем на кнопку менеджер проектов.

Далее нас интересует кнопка создание и поиск новых расширений.

Откроется такое окно:

Здесь у меня сразу же отображается расширение для геймпада. Если у вас нет, то просто в поиске введите слово “Gamepads” (разработчик Bouh). Устанавливаем данное расширение.

Теперь у нас есть расширение для геймпада.

Теперь нам доступны новые условия и действия. Перейдем в события. Мы хотим чтобы объект двигался вверх, если мы нажмем либо кнопку на клавиатуре “Up”, либо мы задействуем стик на джойстике.

Создаем дополнительное условие.

Выбираем необходимое условие.

И в параметрах у нас есть три пункта: в первом мы выбираем какой джойстик (можно подключать до 4 джойстиков), во втором пункте мы выбираем какой стик (левый или правый), и последний параметр мы должны указать направление.

Добавилось наше условие.

Однако есть проблема. Дело в том, что теперь должны сработать оба условия (т.е. мы должны одновременно нажать кнопку на клавиатуре и стик на джойстике), чтобы объект двигался вверх. Т.е. чтобы действие сработало, оба условия должны быть верными. 

Чтобы решить эту проблему, на просто надо добавить еще одно условие Or (т.е. или).

Далее мы должны поместить два наших предыдущих условия в окно под условия Or, вот так:

Получается теперь действие выполнится если одно(!) их этих условий сработает.

Копируем эти условия в остальные направления и меняем параметры.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *